package com.zff.wechat.despatcher.impl;

import java.util.Date;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.zff.web.constants.Constants;
import com.zff.web.dao.WxUserLocationMapper;
import com.zff.web.outsideInter.ALiYunApiService;
import com.zff.web.outsideInter.GaoDeMapService;
import com.zff.web.po.WxTextPo;
import com.zff.web.po.WxUserLocationPo;
import com.zff.web.service.WxTextService;
import com.zff.wechat.despatcher.MsgDispatcherService;
import com.zff.wechat.message.resp.TextMessage;
import com.zff.wechat.util.MessageUtil;

/**
 * 
 * @ClassName:  MsgDispatcher   
 * @Description:(消息业务处理分发器)   
 * @author: Android_Robot  
 * @date:   2017年6月2日 上午11:06:16   
 *
 */
@Service
public class MsgDispatcherImpl implements MsgDispatcherService{
	
	private static final Log LOG = LogFactory.getLog(MsgDispatcherImpl.class);
	
	@Autowired
	private WxTextService wxTextService;
	@Autowired
	private GaoDeMapService gaoDeMapService;
	@Autowired
	private WxUserLocationMapper wxUserLocationMapper;
	@Autowired
	private ALiYunApiService aLiYunApiService;
	
	
	public String processMessage(Map<String, String> map) throws Exception {
		String openid=map.get("FromUserName"); //用户 openid
    	String mpid=map.get("ToUserName");   //公众号原始 ID
    	String ttGreet = map.get("Content");
    	
		// 文本消息
        if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
        	LOG.info("==============这是文本消息！");
        	// 普通文本消息
         	TextMessage txtmsg=new TextMessage();
         	txtmsg.setFromUserName(mpid);
         	txtmsg.setToUserName(openid);
         	txtmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
         	
         	/** 定位*/
        	if (ttGreet.equals("我的位置")) {
        		// 根据用户名获取用户Location信息
        		WxUserLocationPo userLocationPo = wxUserLocationMapper.fetchUserLocationByFromUser(openid);
        		txtmsg.setCreateTime(new Date().getTime());
        		txtmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
        		String userLocation = "您未同意共享您的位置给小狗蛋，小狗蛋无法获取您的位置哦！";
        		if (null != userLocationPo) {
        			// 将获取到的坐标信息传入高德地图定位方法中
            		userLocation = gaoDeMapService.userLocation(userLocationPo.getLatitude(), userLocationPo.getLongitude());
//            		String userLocation = gaoDeMapService.userLocation("31.204782", "121.615869");
				}
        		if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { // 文本消息
                	txtmsg.setContent(userLocation);
                	return MessageUtil.textMessageToXml(txtmsg);
        		}
        	}
        	/** 路径规划*/
        	if (ttGreet.contains("位置从")) {
        		String pathPlanningCon = gaoDeMapService.pathPlanningConByMap(ttGreet);
        		txtmsg.setCreateTime(new Date().getTime());
            	txtmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
            	if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { // 文本消息
            		txtmsg.setContent(pathPlanningCon);
                	return MessageUtil.textMessageToXml(txtmsg);
            	}
        	}
        	/** 对话*/
        	// 先获取到问的问题，然后去数据库中匹配，将匹配到的数据返回，如果匹配不到，就调用搜索接口，获取信息
        	WxTextPo wxTextPo = wxTextService.fetchAnswerByGreet(ttGreet);
        	txtmsg.setCreateTime(new Date().getTime());
        	
        	if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { // 文本消息
        	    txtmsg.setContent(wxTextPo.getTtAnswer());
        	    return MessageUtil.textMessageToXml(txtmsg);
        	}
        }
        if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) { // 图片消息
            LOG.info("==============这是人脸识别功能！");
            // {MediaId=hUXwjBaNGYdvH1CLdnIwWVRocS487Nrp5yfiwyogmy0PBH9agfb61p_66NRqdGdX, CreateTime=1499419175, ToUserName=gh_68b3159f270a, FromUserName=o-YEj1Fkx0pmR7gcUtI2GE2naURk, MsgType=image, PicUrl=http://mmbiz.qpic.cn/mmbiz_jpg/2iboBY0iczGJArffO4TnibM9AIKgjicnvObmkichNXPWmPDsNtbTtNI04YagwRiaPYOxAqBB3EcWH0MicJ3icIwUZS8iang/0, MsgId=6439956320147548654}
            String imgFile = map.get("PicUrl");
            String respJson = aLiYunApiService.faceAgeRecognition(imgFile);
             System.out.println(respJson);
//            //对图文消息
//            NewsMessage newmsg=new NewsMessage();
//            newmsg.setToUserName(openid);
//            newmsg.setFromUserName(mpid);
//            newmsg.setCreateTime(new Date().getTime());
//            newmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);
//
//            if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) { // 图片消息
//                System.out.println("==============这是图片消息！");
//                Article article=new Article();
//                article.setDescription("图文消息"); //图文消息的描述
//                article.setPicUrl(""); //图文消息图片地址
//                article.setTitle("图文消息 ");  //图文消息标题
//                article.setUrl("http://www.dancoder.cn/");  //图文 url 链接
//                List<Article> list=new ArrayList<Article>();
//                list.add(article);     //这里发送的是单图文，如果需要发送多图文则在这里 list 中加入多个 Article 即可！
//                newmsg.setArticleCount(list.size());
//                newmsg.setArticles(list);
//                return MessageUtil.newsMessageToXml(newmsg);
//            }  
        }

        if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) { // 链接消息
        	LOG.info("==============这是链接消息！");
        }

        if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) { // 位置消息
        	LOG.info("==============这是位置消息！");
        }

        if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)) { // 视频消息
        	LOG.info("==============这是视频消息！");
        }

        if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) { // 语音消息
        	if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) { 
        		LOG.info("==============这是语音消息！");
            	//普通语音消息
            	TextMessage txtmsg=new TextMessage();
            	txtmsg.setFromUserName(mpid);
            	txtmsg.setToUserName(openid);
            	txtmsg.setCreateTime(new Date().getTime());
            	txtmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
            	if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) { // 语音消息
            	    txtmsg.setContent(Constants.NO_VOICE_RESP);
            	    return MessageUtil.textMessageToXml(txtmsg);
            	}
            }
        }
        return null;
    }
}